import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un proyectil. Esta clase se encarga de seleccionar el proyectil que desea el jugador.
 * 
 * @author Miguel Martinez Aguilar
 * @version 10 de Mayo del 2013
 */
public class Boton_arma extends Boton
{
    // Declaracion de variables de instancia
    private Armeria armeria;// es el objeto Armeria.
    private int tipo;// es el tipo de boton.
    private boolean usado;// es un boleano que define si este boton sera usado de forma directa.
    private boolean activo;// es un boleano que indica si este boton esta activo.
    private GreenfootImage nulo;// es una imagen que representa a este boton como nulo.
    private String img2;// es el nombre de una imagen.
    private Select_Armas bot;// es un boton de tipo Select_Armas.
    private ImagenM proy;// es una imagen que representa a un proyectil.
    private int cantidad;// es la cantidad de proyectiles disponibles.
    
    /**
     * Este es el metodo constructor del boton de proyectiles.
     * @param bot: el objeto Select_Armas al que hara referencia este boton.
     * @param armeria: el objeto armeria al que hara referencia este boton.
     * @param tipo: un numero que representa el tipo de boton que sera.
     * @param usado: boleano que indica si este boton sera usado de forma directa.
     */
    public Boton_arma(Select_Armas bot, Armeria armeria, int tipo, boolean usado)
    {
        super("boton_arma0.png","boton_arma1.png","boton_arma2.png");
        this.tipo = tipo;
        if(tipo == 0){
            img2 = "bala0.png";
            cantidad = 100;
        }
        if(tipo == 1){
            img2 = "granadah0.png";
            cantidad = 2;
        }
        if(tipo == 2){
            img2 = "granadav0.png";
            cantidad = 2;
        }
        if(tipo == 3){
            img2 = "bomba0.png";
            cantidad = 2;
        }
        proy = new ImagenM(img2);
        this.armeria = armeria;
        nulo = new GreenfootImage("boton_arma3.png");
        activo = false;
        this.usado = usado;
        this.bot = bot;
    }
    
    /**
     * Este metodo selecciona el proyectil al que este boton representa y verifica si aun existen <p>
     * proyectiles de este tipo disponibles.
     */
    public void ejecuta()
    {
        if(usado){
            if(cantidad > 0){
                if(activo){
                    this.cambiaProyectil();
                    bot.ejecuta();
                }
            }
        }
    } 
    
    /**
     * Este metodo verifica la disponibilidad de este proyectil para jugadores no usuarios.
     */
    public void verificacion()
    {
        if(cantidad > 0){
            this.cambiaProyectil();
        }
    } 
    
    /**
     * Este metodo cambia el tipo de arma de Armeria por el que tiene este boton.
     */
    public void cambiaProyectil()
    {
        armeria.cambiaProyectil(tipo,img2);
    } 
    
    /**
     * Este metodo activa este boton.
     * @param val: boleano que indica si este boton sera activado o desactivado.
     */
    public void activar(boolean val)
    {
        activo = val;
        if(val){
            img[0].setTransparency(255);
            img[1].setTransparency(255);
            img[2].setTransparency(255);
            (this.getImage()).setTransparency(255);
            (proy.getImage()).setTransparency(255);
        }
        else{
            img[0].setTransparency(0);
            img[1].setTransparency(0);
            img[2].setTransparency(0);
            (this.getImage()).setTransparency(0);
            (proy.getImage()).setTransparency(0);
        }
    }
    
    /**
     * Este metodo agrega la imagen que indica que tipo de proyectil representa este boton.
     */
    public void prepara()
    {
        ScrollWorld mundo = super.getWorld();
        mundo.addObject(proy,this.getX(),this.getY());
    } 
    
    /**
     * Este metodo cambia las imagenes de este boton por una imagen que significa nulo.
     */
    public void anular()
    {
        img[0] = nulo;
        img[1] = nulo;
        img[2] = nulo;
        this.setImage(nulo);
        if(!activo)(this.getImage()).setTransparency(0);
    }
    
    /**
     * Este metodo disminuye la cantidad de armas disponibles.
     */
    public void disminuir()
    {
        cantidad--;
        if(cantidad == 0){
            armeria.cambiaProyectil(0,"bala0.png");
            this.anular();
        }
    }
}
